

from rest_framework import serializers
from users.models import User
from django.contrib.auth.models import Group
from django.contrib.auth.hashers import make_password


class GroupSimpleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Group
        fields = [
            'id',
            'name'
        ]



class AdminModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            'id',
            'username',
            'email',
            'mobile',


            'password',
            'groups',
            'user_permissions'
        ]

        extra_kwargs = {
            "password": {"write_only": True}
        }


    def validate(self, attrs):
        # 校验的过程中，1、对密码进行加密；2、在有效数据中手动添加is_staff=True
        password = attrs.get('password')
        # 对password进行加密处理
        # 使用make_password函数手动加密，在把有效数据中的password赋值为密文密码
        attrs['password'] = make_password(password)
        attrs['is_staff'] = True

        # 此时此刻有效数据中密码就是加密的，并且有了is_staff=True
        return attrs

    # 如果我们重写creat方法实现加密，那么中间表数据我们也得自己创建！
    # 一下代码是错误的！！！下面重写create方法无法实现用户新建
    # def create(self, validated_data):
        # 我们必须先创建主表数据，再去创建中间表数据
        # 而咱们自己实现的create方法并没有遵循这个前后顺序
        # return User.objects.create_superuser(**validated_data)

